package com.xinlu.cqssc.bo;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;

import com.xinlu.common.game.dao.BankBackDao;
import com.xinlu.common.game.dao.TzjlDao;
import com.xinlu.common.game.dao.WcSjglDao;
import com.xinlu.derek.common.BaseBo;
import com.xinlu.persistence.Tzjl;
import com.xinlu.persistence.Users;
import com.xinlu.persistence.WcSjgl;
import com.xinlu.user.dao.UsersDao;
import com.xinlu.util.tool.DateUtil;
import com.xinlu.util.tool.DoNumber;

public class CqsscBo extends BaseBo{
	
	private BankBackDao bankBackDao;
	
	private TzjlDao tzjlDao;
	
	private UsersDao usersDao;
	
	private WcSjglDao wcSjglDao;
	
	public void setBankBackDao(BankBackDao bankBackDao) {
		this.bankBackDao = bankBackDao;
	}

	public void setTzjlDao(TzjlDao tzjlDao) {
		this.tzjlDao = tzjlDao;
	}
	
	public void setUsersDao(UsersDao usersDao) {
		this.usersDao = usersDao;
	}
	
	public void setWcSjglDao(WcSjglDao wcSjglDao) {
		this.wcSjglDao = wcSjglDao;
	}

	//	***************** Dao 注入	********************************

	
	

	/**
	 * 
	 * Function :
	 * @param addMoney
	 * @param onemoney
	 * @param beishu
	 * @param protype
	 * @param codes
	 * @param expect
	 * @param username
	 * @param xl
	 * @param czlx
	 * @param sfzh
	 * @param zhqs
	 * @param zjtzzh
	 * @param users
	 * @return
	 * Derek
	 * 2011-5-17 上午06:39:02
	 */
	public Users saveTzjlInfo( double allmoney, double onemoney, int beishu, String protype, String codes, String expect, String username, String xl, String yjf, String czlx, String zhuihaobeishu, String zhuihaoqihao, String zhqs, String zjtzzh, Users users, String yymmdd){
		
		
//		Tzjl po = this.saveTzjlBo(addMoney, onemoney, protype, codes, expect, beishu, username, xl, czlx, zhqs, sfzh, zjtzzh);
//		this.saveTzjlIntoBankBack(username, protype, addMoney, users.getUermoney(), users.getUermoney() - addMoney, po.getDzh(), expect, 1, "1");
//		
//		users.setUermoney(users.getUermoney() - addMoney);
//		users.setAllmoney(users.getAllmoney() - addMoney);
		
//		String codesVal = DealCodeinfoUtils.dealCodes(codes);
		
		List<Tzjl> tzjlList = new ArrayList<Tzjl>();
		
		String hhmmss = DateUtil.getFormatDate(DateUtil.HH_MI_SS, new Date());
		
		if (yymmdd == null || yymmdd == "") {
			
			yymmdd = "2009/12/01";
		}
		
		
		WcSjgl wcsjglPo = this.wcSjglDao.getNewQishuXinxi(DateUtil.getDate(DateUtil.YYYY_MM_DD_HH_MI_SS, yymmdd + " " + hhmmss), protype.split("_")[0]);
		
//		WcSjgl wcsjglPo = this.wcSjglDao.getNewQishuXinxi(DateUtil.getCurrentDateTimestamp(), protype.split("_")[0]);
		
		if (protype.contains("CQSSC")) {
			
			if (!(DateUtil.getFormatDate(DateUtil.YYYYMMDD, new Date()) + wcsjglPo.getQh()).equals(expect)) {
				
				return users;
			}
		}else if (protype.contains("JXSSC")) {
			
			if (!(DateUtil.getFormatDate(DateUtil.YYYYMMDD, new Date()) + "0" + wcsjglPo.getQh()).equals(expect)) {
				
				return users;
			}
		}else if (protype.contains("HLJSSC")) {
			
			if (!("100569" + wcsjglPo.getQh()).equals(expect)  ) {
				return users;
			}
		}
		
//		Pattern.compile("{}");
//		
//		if (zhqs != null && Integer.parseInt(zhqs) > 1) {
//			
//			String[] qihaos = zhuihaoqihao.split(",");
//			String[] beishus = zhuihaobeishu.split(",");
//			
//			
//		}
		
//		if ("1".equals(yjf)) {
//			yjf = "0";
//		}else if ("0.1".equals(yjf)) {
//			
//			yjf = "1";
//		}else if ("0.01".equals(yjf)) {
//			yjf = "2";
//		}
		
		
		users = usersDao.getUserinfo(username);
		
		double usermoney = users.getUermoney();
		double userAllMoney = users.getAllmoney();
		
		if (zhqs != null && Integer.parseInt(zhqs) > 1) {
			
			String[] qihaos = zhuihaoqihao.split(",");
			String[] beishus = zhuihaobeishu.split(",");
//			String[] cs = codes.split(",");
			int zjtzzhVal = Integer.parseInt(zjtzzh);
			int zhqsVal = Integer.parseInt(zhqs);
			Tzjl po = null;
			
			String zhm = null;
			String dzh = null;
			
			if (qihaos.length > 0) {
				
				String qh = null;
				//	追号设置
				for (int i = 0; i < qihaos.length; i++) {
					
					qh = qihaos[i];
					po = new Tzjl();
					
					//	倍数
					po.setBs(beishus[i]);
					//	投注号码
					po.setTzhm(codes);
					//	期号
					po.setQh(qh);
					//	是否返回: 0未返还
					po.setSffh(0);
					//	是否追号:0不追号
					po.setSfzh(1);
					//	中奖后停止追号
					po.setZjtzzh(zjtzzhVal);
					//	当期金额
					po.setDqje(DoNumber.roundNumber((onemoney * Integer.parseInt(beishus[i])),2) + "");
					//	单证状态
					po.setDzzt("正常");
					//	游戏类型
					po.setYxlx(protype);
					//	用户名
					po.setYhm(username);
					//	系列:1700、1800、1900
					po.setXl(xl);
					//	彩种类型:WC、SC
					po.setCzfl(czlx);
					//	中奖状态
					po.setZjzt("未开奖");
					//	追号期数:默认为1
					po.setZhqs(zhqsVal);
					//	代购时间
					po.setDgsj(new Timestamp(new Date().getTime()));
					//	单次提交金额  
					po.setDctjzje(String.valueOf(DoNumber.roundNumber(allmoney,2)));
					//	----	通过验证，需要去查询时间表
					po.setTgyz(1);
					//	中奖金额
					po.setZjje("0");
					//	中奖号码
					po.setZjhm("");
					//	圆角分模式 0,1,2
					po.setYjf(yjf);
					
					po.setId(this.tzjlDao.save(po));
					
					if (i == 0) {
						
						po.setZhm(po.getId() + "");
						po.setDzh(po.getXl() + "_" + po.getQh() + po.getYxlx() + po.getId() + "y");
						
						zhm = po.getZhm();
//						dzh = po.getDzh();
						
						this.tzjlDao.update(po);
					}else{
						
//						this.tzjlDao.save(po);
						po.setZhm(zhm);
//						po.setDzh(dzh);
						po.setDzh(po.getXl() + "_" + qihaos[0] + po.getYxlx() + po.getId() + "y");
						
						this.tzjlDao.update(po);
					}
					
					this.bankBackDao.saveTzjlInfoInBankBack(username, protype, DoNumber.roundNumber(onemoney * Integer.parseInt(beishus[i]),2), usermoney, DoNumber.roundNumber(userAllMoney - onemoney * Integer.parseInt(beishus[i]), 2), po.getDzh(), qh, 0, "1");
					
					usermoney = DoNumber.roundNumber(usermoney - onemoney * beishu, 2);
					userAllMoney = DoNumber.roundNumber(userAllMoney - onemoney * beishu, 2);
				}
			}
			
		}else{
			
			Tzjl po = new Tzjl();
			
			//	倍数
			po.setBs(String.valueOf(beishu));
			//	投注号码
			po.setTzhm(codes);
			//	期号
			po.setQh(expect);
			//	是否返回: 0未返还
			po.setSffh(0);
			//	是否追号:0不追号
			po.setSfzh(0);
			//	中奖后停止追号
			po.setZjtzzh(0);
			//	当期金额
			po.setDqje(String.valueOf(DoNumber.roundNumber(onemoney * beishu,2)));
			//	单证状态
			po.setDzzt("正常");
			//	游戏类型
			po.setYxlx(protype);
			//	用户名
			po.setYhm(username);
			//	系列:1700、1800、1900
			po.setXl(xl);
			//	彩种类型:WC、SC
			po.setCzfl(czlx);
			//	中奖状态
			po.setZjzt("未开奖");
			//	追号期数:默认为1
			po.setZhqs(1);
			//	代购时间
			po.setDgsj(new Timestamp(new Date().getTime()));
			//	单次提交金额
			po.setDctjzje(String.valueOf(DoNumber.roundNumber(onemoney * beishu,2)));
			//	----	通过验证，需要去查询时间表
			po.setTgyz(1);
			//	中奖金额
			po.setZjje("0");
			//	中奖号码
			po.setZjhm("");
			//	设置圆角分 0、1、2
			po.setYjf(yjf);
			
			Long id = this.tzjlDao.save(po); 
			po.setId(id);
			
			po.setZhm(po.getId() + "");
			po.setDzh(po.getXl() + "_" + po.getQh() + po.getYxlx() + po.getId() + "y");
			
			
			this.tzjlDao.update(po);
			
			this.bankBackDao.saveTzjlInfoInBankBack(username, protype, DoNumber.roundNumber(onemoney * beishu,2), users.getAllmoney(), DoNumber.roundNumber(users.getAllmoney() - onemoney * beishu,2), po.getDzh(), expect, 0, "1");
			
			
			usermoney = DoNumber.roundNumber(usermoney - onemoney * beishu, 2);
			userAllMoney = DoNumber.roundNumber(userAllMoney - onemoney * beishu, 2);
		}
		
		//	四舍五入
		users.setUermoney(usermoney);
		users.setAllmoney(userAllMoney);
		
		this.usersDao.updateUserInfo(users);
		
		return users;
	}
	
	/**
	 * 
	 * Function :
	 * @param addMoney
	 * @param onemoney
	 * @param protype
	 * @param codes
	 * @param expect
	 * @param beishu
	 * @param username
	 * @param xl
	 * @param czlx
	 * @param zhqs
	 * @param sfzh
	 * @param zjtzzh
	 * @return
	 * Derek
	 * 2011-5-17 上午06:38:56
	 */
	public Tzjl saveTzjlBo(double addMoney, double onemoney, String protype, String codes, String expect, int beishu, String username, String xl, String czlx, int zhqs, int sfzh, int zjtzzh){
		
		Tzjl po = new Tzjl();
		
		//	倍数
		po.setBs(String.valueOf(beishu));
		//	投注号码
		po.setTzhm(codes);
		//	期号
		po.setQh(expect);
		//	是否返回: 0未返还
		po.setSffh(0);
		//	是否追号:0不追号
		po.setSfzh(sfzh);
		//	中奖后停止追号
		po.setZjtzzh(zjtzzh);
		//	当期金额
		po.setDqje(addMoney + "");
		//	单证状态
		po.setDzzt("正常");
		//	游戏类型
		po.setYxlx(protype);
		//	用户名
		po.setYhm(username);
		//	系列:1700、1800、1900
		po.setXl(xl);
		//	彩种类型:WC、SC
		po.setCzfl(czlx);
		//	中奖状态
		po.setZjzt("未中奖");
		//	追号期数:默认为1
		po.setZhqs(1);
		//	代购时间
		po.setDgsj(new Timestamp(new Date().getTime()));
		//	单次提交金额
		po.setDctjzje(addMoney * beishu + "");
		//	----	通过验证，需要去查询时间表
		po.setTgyz(1);
		
		po.setId(this.tzjlDao.save(po));
		
		
		po.setZhm(po.getId() + "");
		po.setDzh(po.getXl() + "_" + po.getQh() + po.getYxlx() + po.getId() + "y");
		
		this.tzjlDao.update(po);
		
		return po;
	}
	
	/**
	 * 
	 * Function :	
	 * @param username :	用户名
	 * @param type	:		游戏类型		(CQSSCZXDS) 彩种类型 + 游戏类型
	 * @param addmoney	：	投注金额
	 * @param oldmoney	:	购买前用户的金额
	 * @param nowmoney	:	用户现在的金额		
	 * @param pro_num	：	单证号
	 * @param cpnum		：	期号
	 * @param bz		：	备注
	 * @param states	：	状态
	 * Derek
	 * 2011-5-17 上午06:14:50
	 */
	public void saveTzjlIntoBankBack(String username, String type, double addmoney, double oldmoney, double nowmoney, String pro_num, String cpnum, int bz, String states){
		
		this.bankBackDao.saveTzjlInfoInBankBack(username, type, addmoney, oldmoney, nowmoney, pro_num, cpnum, bz, states);
	}
	
	
	public List getLottyTimeList(String yymmdd, String yxms){
		
		String hhmmss = DateUtil.getFormatDate(DateUtil.HH_MI_SS, new Date());
		
		if (yymmdd == null || yymmdd == "") {
			
			yymmdd = "2009/12/01" ;
		}
		
		Timestamp currentTime = DateUtil.getTimestamp(DateUtil.getDate(DateUtil.YYYY_MM_DD_HH_MI_SS, yymmdd + " " + hhmmss));
		
		return this.wcSjglDao.getLottyList(currentTime, yxms);
	}
	
}
